Conversation
- Remove jersey-media-json-jackson dependency - Add com.googlecode.json-simple:json-simple:1.1.1 - Add JsonUtils helper class for safe JSON parsing - Rewrite all 37 model/DTO classes with fromJson()/toJSON() - Rewrite all 30 request classes to use String response + fromJson() - Fixes UnrecognizedPropertyException on API schema changes - Bump version from 2.2 to 2.3.0
Deprecated: - All Rule management requests (CreateRuleRequest, DeleteRuleRequest, DisableRuleRequest, EnableRuleRequest, GetRuleRequest, GetRulesRequest) - Domain management requests (CreateDomainRequest, DeleteDomainRequest) - Authenticator endpoints absent from current OpenAPI spec (GetAuthenticatorRequest, GetAuthenticatorByIdRequest, GetAuthenticatorsRequest) - Legacy wildcard message endpoints that return server errors (GetLatestMessagesRequest, GetLatestInboxMessagesRequest) Added: - GetSmsInboxRequest: full query param support (skip, limit, sort, decode_subject, cursor, full, wait, delete) aligned with OpenAPI spec - GetInboxMessageRequest: optional `delete` query parameter Fixed: - GetDomainsRequest: removed trailing slash from /domains/ - USER_AGENT bumped to Mailinator SDK - Java V2.4 - Version bumped to 2.4.0
… versioning (v2.5.0)
Added
- GetMessageSummaryRequest + MessageSummaryResponse / MessageSummary: fetch a message summary (GET /api/v2/domains/{domain}/messages/{id}/summary).
- GetMessageTextRequest + MessageTextResponse: fetch the text body of a message (GET /api/v2/domains/{domain}/messages/{id}/text).
- GetMessageTextPlainRequest: fetch the plain-text variant of a message body (GET /api/v2/domains/{domain}/messages/{id}/textplain), returns raw JSONObject.
- GetMessageTextHtmlRequest: fetch the HTML variant of a message body (GET /api/v2/domains/{domain}/messages/{id}/texthtml), returns raw JSONObject.
- GetMessageHeadersRequest + MessageHeadersResponse: fetch all message headers (GET /api/v2/domains/{domain}/messages/{id}/headers).
- GetStreamDomainMessagesRequest: long-poll stream for the next message arriving in any inbox of a domain (GET /api/v2/domains/{domain}/stream). Pings are transparently skipped; result is returned as an Inbox.
- GetStreamInboxMessagesRequest: long-poll stream for the next message arriving in a specific inbox (GET /api/v2/domains/{domain}/stream/{inbox}).
- New integration tests for all seven request classes above, gated on MAILINATOR_TEST_REAL_MESSAGE_ID (or existing env vars where applicable).
- MAILINATOR_TEST_REAL_MESSAGE_ID constant added to TestEnv.
- Test resilience for plan-limited features: stream tests gated on MAILINATOR_TEST_ENABLE_STREAM, attachment/text/headers/summary tests skip gracefully on HTTP 500, delete/wait params skip if not honored.
Fixed
- GetInboxRequest: when inbox is null, the URL template now resolves to * (i.e. /inboxes/*) instead of an empty path segment, matching the Mailinator wildcard-inbox convention.
- User-Agent header version is now derived automatically from the POM version via Maven resource filtering — the string Mailinator SDK - Java V{version} is resolved at build time, so no manual update is required on each release.
- Version bumped to 2.5.0
Changed
- Deprecated test classes now carry @disabled annotations with descriptive messages so they are skipped rather than executed: all six rule tests, CreateDomainRequestTest, DeleteDomainRequestTest, GetAuthenticatorsRequestTest, GetAuthenticatorRequestTest, GetAuthenticatorByIdRequestTest, GetLatestMessagesRequestTest, GetLatestInboxMessagesRequestTest.
There was a problem hiding this comment.
Pull request overview
This PR modernizes the Mailinator Java SDK by removing Jackson-based POJO binding in favor of json-simple + explicit parsing helpers, deprecating unsupported endpoints, adding several new message retrieval operations (summary/headers/text variants and streaming), and updating integration tests and SDK versioning.
Changes:
- Replace Jackson dependency/POJO binding with
json-simple, introducingJsonUtilsandfromJson(...)/toJSON()patterns across models and requests. - Add new message APIs: stream domain/inbox, message summary, message headers, and message text endpoints (including plain/html variants).
- Improve integration test gating/resilience (env var lookups, graceful skips on plan-limited behavior) and add automatic SDK versioning in User-Agent.
Reviewed changes
Copilot reviewed 125 out of 125 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequestTest.java | Use env var value (via System.getenv) for webhook token in tests. |
| src/test/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequestTest.java | Use env var values for webhook token + inbox. |
| src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequestTest.java | Use env var values for webhook token + custom service. |
| src/test/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequestTest.java | Use env var values for webhook token + custom service + inbox. |
| src/test/java/com/manybrain/mailinator/client/rule/GetRulesRequestTest.java | Disable deprecated rules test. |
| src/test/java/com/manybrain/mailinator/client/rule/GetRuleRequestTest.java | Disable deprecated rule test. |
| src/test/java/com/manybrain/mailinator/client/rule/EnableRuleRequestTest.java | Disable deprecated enable-rule test. |
| src/test/java/com/manybrain/mailinator/client/rule/DisableRuleRequestTest.java | Disable deprecated disable-rule test. |
| src/test/java/com/manybrain/mailinator/client/rule/DeleteRuleRequestTest.java | Disable deprecated delete-rule test. |
| src/test/java/com/manybrain/mailinator/client/rule/CreateRuleRequestTest.java | Disable deprecated create-rule test. |
| src/test/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequestTest.java | New integration test for inbox stream endpoint (env-gated). |
| src/test/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequestTest.java | New integration test for domain stream endpoint (env-gated). |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageTextRequestTest.java | New integration test for message /text endpoint with graceful skip on 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequestTest.java | New integration test for message /textplain endpoint with graceful skip on 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequestTest.java | New integration test for message /texthtml endpoint with graceful skip on 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequestTest.java | New integration test for message /summary endpoint with graceful skip on 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageRequestTest.java | Make delete/wait behavior assertions more resilient (skip when not supported). |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageHeadersRequestTest.java | New integration test for message /headers endpoint with graceful skip on 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequestTest.java | Gracefully skip when attachment message retrieval returns 500. |
| src/test/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequestTest.java | Disable deprecated latest-messages test. |
| src/test/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequestTest.java | Disable deprecated latest-inbox-messages test. |
| src/test/java/com/manybrain/mailinator/client/message/GetInboxRequestTest.java | Gracefully skip when wait query param isn’t supported. |
| src/test/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequestTest.java | Gracefully skip when attachment message retrieval returns 500. |
| src/test/java/com/manybrain/mailinator/client/domain/DeleteDomainRequestTest.java | Disable deprecated domain-delete test. |
| src/test/java/com/manybrain/mailinator/client/domain/CreateDomainRequestTest.java | Disable deprecated domain-create test. |
| src/test/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequestTest.java | Use env var value for auth secret. |
| src/test/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequestTest.java | Disable deprecated authenticators-list test. |
| src/test/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsByIdRequestTest.java | Use env var value for authenticator ID. |
| src/test/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequestTest.java | Disable deprecated authenticator endpoint test. |
| src/test/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequestTest.java | Disable deprecated authenticator-by-id endpoint test and use env var value when applicable. |
| src/test/java/com/manybrain/mailinator/client/TestEnv.java | Add new env constants and fix getters to return env var values instead of constant names. |
| src/main/resources/mailinator-sdk.properties | New filtered properties file for SDK versioning. |
| src/main/java/com/manybrain/mailinator/client/webhook/Webhook.java | Replace Jackson annotations with toJSON() serialization using json-simple. |
| src/main/java/com/manybrain/mailinator/client/webhook/PrivateWebhookResponse.java | Replace Jackson binding with fromJson(JSONObject) parsing. |
| src/main/java/com/manybrain/mailinator/client/webhook/PrivateWebhookRequest.java | Post JSON strings and parse responses via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/webhook/PrivateInboxWebhookRequest.java | Post JSON strings and parse responses via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceWebhookRequest.java | Post webhook bodies as JSON strings (no Jackson). |
| src/main/java/com/manybrain/mailinator/client/webhook/PrivateCustomServiceInboxWebhookRequest.java | Post webhook bodies as JSON strings (no Jackson). |
| src/main/java/com/manybrain/mailinator/client/stats/TeamInfo.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/Team.java | Replace Jackson binding with fromJson(JSONObject) and list parsing. |
| src/main/java/com/manybrain/mailinator/client/stats/StatsItem.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/Stats.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/SmsNumbersItem.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/Sent.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/Retrieved.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/PrivateDomainsItem.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/PlanData.java | Replace Jackson binding with fromJson(JSONObject) (and add Lombok @Data). |
| src/main/java/com/manybrain/mailinator/client/stats/MembersItem.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/stats/GetTeamRequest.java | Fetch responses as String and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/stats/GetTeamInfoRequest.java | Fetch responses as String and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/stats/GetStatsRequest.java | Fetch responses as String and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/Rules.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/rule/RuleToCreate.java | Replace Jackson serialization with toJSON() for request body creation. |
| src/main/java/com/manybrain/mailinator/client/rule/Rule.java | Replace Jackson binding with fromJson(JSONObject) including enum parsing. |
| src/main/java/com/manybrain/mailinator/client/rule/GetRulesRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/GetRuleRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/EnableRuleRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/DisableRuleRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/DeleteRuleRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/CreateRuleRequest.java | Deprecate endpoint; serialize request body via toJSON() and parse response via fromJson. |
| src/main/java/com/manybrain/mailinator/client/rule/ConditionData.java | Replace Jackson binding with fromJson and add toJSON(). |
| src/main/java/com/manybrain/mailinator/client/rule/Condition.java | Replace Jackson binding with fromJson and add toJSON(). |
| src/main/java/com/manybrain/mailinator/client/rule/ActionData.java | Replace Jackson binding with fromJson and add toJSON(). |
| src/main/java/com/manybrain/mailinator/client/rule/Action.java | Replace Jackson binding with fromJson and add toJSON(). |
| src/main/java/com/manybrain/mailinator/client/message/SmtpLog.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/PostedMessage.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/Part.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/MessageToPost.java | Replace Jackson serialization with toJSON() for request body creation. |
| src/main/java/com/manybrain/mailinator/client/message/MessageTextResponse.java | New DTO + fromJson(JSONObject) for /text endpoint. |
| src/main/java/com/manybrain/mailinator/client/message/MessageSummaryResponse.java | New DTO + fromJson(JSONObject) for /summary endpoint. |
| src/main/java/com/manybrain/mailinator/client/message/MessageSummary.java | New DTO + fromJson(JSONObject) for summary payload. |
| src/main/java/com/manybrain/mailinator/client/message/MessageHeadersResponse.java | New DTO + fromJson(JSONObject) for /headers endpoint. |
| src/main/java/com/manybrain/mailinator/client/message/Message.java | Replace Jackson binding with fromJson(JSONObject) for message payloads. |
| src/main/java/com/manybrain/mailinator/client/message/LinksFull.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/Links.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/LinkEntity.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/Inbox.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/GetStreamInboxMessagesRequest.java | New request for inbox-scoped stream endpoint. |
| src/main/java/com/manybrain/mailinator/client/message/GetStreamDomainMessagesRequest.java | New request + NDJSON parsing for domain stream endpoint. |
| src/main/java/com/manybrain/mailinator/client/message/GetSmsInboxRequest.java | Add full query parameter support; parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageTextRequest.java | New request for /text endpoint; parse via JsonUtils + DTO fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageTextPlainRequest.java | New request for /textplain endpoint returning JSONObject. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageTextHtmlRequest.java | New request for /texthtml endpoint returning JSONObject. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageSummaryRequest.java | New request for /summary endpoint; parse via JsonUtils + DTO fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageSmtpLogRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageLinksFullRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageHeadersRequest.java | New request for /headers endpoint; parse via JsonUtils + DTO fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetMessageAttachmentsRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetLatestMessagesRequest.java | Deprecate and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetLatestInboxMessagesRequest.java | Deprecate and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetInboxRequest.java | Fix wildcard inbox handling (*) and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageSmtpLogRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageRequest.java | Add delete query param support; parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageLinksRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/GetInboxMessageAttachmentsRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/EmailLogEntry.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/DeletedMessages.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/DeleteMessageRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/DeleteInboxMessagesRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/DeleteDomainMessagesRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/message/Attachments.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/message/Attachment.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/domain/GetDomainsRequest.java | Fix URL path and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/domain/GetDomainRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/domain/Domains.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/domain/Domain.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/domain/DeleteDomainRequest.java | Deprecate endpoint and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/domain/CreateDomainRequest.java | Deprecate endpoint and parse via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeResponse.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/authenticator/InstantTOTP2FACodeRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsResponse.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorsByIdRequest.java | Parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/GetAuthenticatorByIdRequest.java | Deprecate endpoint and parse response via JsonUtils + fromJson. |
| src/main/java/com/manybrain/mailinator/client/authenticator/Authenticator.java | Normalize fields and parse via fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/ResponseStatus.java | Replace Jackson binding with fromJson(JSONObject). |
| src/main/java/com/manybrain/mailinator/client/JsonUtils.java | New helper utilities for json-simple parsing and typed getters. |
| src/main/java/com/manybrain/mailinator/client/JerseyClient.java | Remove Jackson features and derive User-Agent version from filtered resource file. |
| src/main/java/com/manybrain/mailinator/client/JacksonObjectMapperProvider.java | Remove Jackson ObjectMapper provider. |
| pom.xml | Bump version, swap Jackson dependency for json-simple, enable resource filtering. |
| CHANGELOG.md | Add changelog documenting 2.3.0–2.5.0 changes and deprecations. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) | ||
| .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); | ||
| return PrivateWebhookResponse.fromJson(JsonUtils.parseObject(response)); |
There was a problem hiding this comment.
execute() calls WEB_TARGET.resolveTemplate("wh-token", ...), but the URL constant has no {wh-token} template. In Jersey this typically throws IllegalArgumentException at runtime. Remove the resolveTemplate("wh-token", ...) call (the token is already passed via the whtoken query param), or add the matching {wh-token} placeholder to the URL if it’s actually required.
| String response = webTarget.request(MediaType.APPLICATION_JSON_TYPE) | ||
| .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); | ||
| return PrivateWebhookResponse.fromJson(JsonUtils.parseObject(response)); |
There was a problem hiding this comment.
execute() resolves a wh-token URI template (resolveTemplate("wh-token", ...)) even though the URL only defines {inbox}. This is likely to throw at runtime or silently do nothing depending on the JAX-RS implementation. Remove the wh-token template resolution and rely on the existing whtoken query param (or update the URL to include {wh-token} if intended).
| return webTarget.request(MediaType.APPLICATION_JSON_TYPE) | ||
| .post(Entity.json(webhook), String.class); | ||
| .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); | ||
| } |
There was a problem hiding this comment.
The request builds webTarget using resolveTemplate("wh-token", ...), but the URL only contains {customService}. This mismatch can throw IllegalArgumentException in JAX-RS. Drop the wh-token template resolution and keep passing the token via whtoken query param (or update the URL to include {wh-token} if that’s the actual endpoint shape).
| return webTarget.request(MediaType.APPLICATION_JSON_TYPE) | ||
| .post(Entity.json(webhook), String.class); | ||
| .post(Entity.entity(webhook.toJSON().toJSONString(), MediaType.APPLICATION_JSON_TYPE), String.class); | ||
| } |
There was a problem hiding this comment.
webTarget is created with resolveTemplate("wh-token", ...) but the URL defines only {customService} and {inbox}. This template mismatch can fail at runtime. Remove resolveTemplate("wh-token", ...) and use the already-present whtoken query param (or update the URL to include {wh-token} if required).
Fixed:
- PrivateWebhookRequest: removed incorrect resolveTemplate("wh-token", ...) call and properly use whtoken query parameter.
- Version bumped to 2.5.1.
This PR modernizes and extends the Java SDK by replacing the Jackson dependency with json-simple for more resilient JSON parsing, deprecating unsupported or undocumented API endpoints, fixing several request inconsistencies, and adding new message operations (summary, headers, text variants, and streaming). It also improves test resilience and introduces automatic SDK versioning in the User-Agent header. SDK version updated from 2.2 → 2.5.0.